iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
Build on Google AI

給藥袋裝一張嘴:30 天用 Android 與 Google VLM 實作高齡語音用藥助手系列 第 10 篇

Day 10|不再說「我的電腦可以跑」!用 Docker 打造可移植的 AI 藥師微服務容器

  • 分享至 

  • xImage
  •  

✏️【本日實作紀錄:微服務 Docker 容器化與環境封裝】

今天進入生產環境部署整備階段,完成項目包含:

  • 補齊與收斂專案相依套件(requirements.txt) — 補上影像處理(Pillow)與消息推播(line-bot-sdk)等關鍵 SDK,避免容器執行時產生 ModuleNotFoundError。
  • 撰寫 .dockerignore 檔案 — 排除 .venv、__pycache__、.env 與 .db 等暫存與敏感檔案,最佳化 Image 建置體積與資安防護。
  • 編寫輕量化 Dockerfile — 選用 Python 3.11-slim 基礎鏡像,封裝系統相依套件、安裝 Python Dependencies 並配置運行環境。
  • 建置與驗證 Docker 容器 — 完成 Docker Image 構建並啟動 Container 進行跨平台 API Health Check 測試。

一、 為什麼需要 Docker 容器化?

過去九天的開發中系統運行於本地開發環境。為了讓系統能穩定部署至雲端伺服器(如 GCP、AWS 或地端伺服器),容器化有核心優勢。

  • 環境高度一致:解決「在我的電腦可以跑,在伺服器卻出錯」的環境差異問題。
  • 快速擴展與一鍵部署:將 Python 環境、Flask 應用與系統相依庫打包為單一 Image,簡化部署流程。

二、 編寫 Docker 部署設定檔

1. 確認完整的 requirements.txt

請確保專案根目錄下的 requirements.txt 包含了影像處理與 LINE SDK 等所有必須套件:

Flask==3.0.3
google-genai==1.75.0
gTTS==2.5.1
python-dotenv==1.0.1
requests==2.32.3
Pillow
line-bot-sdk

2. 建立 .dockerignore

在專案根目錄建立 .dockerignore,避免將無關與敏感檔案打包進容器:

.venv
__pycache__
*.pyc
*.pyo
*.pyd
.env
*.db
static/audio/*.mp3
.git
.gitignore

3. 建立 Dockerfile

在專案根目錄建立 Dockerfile:

# 採用輕量化 Python 3.11 基礎鏡像
FROM python:3.11-slim

# 設定工作目錄
WORKDIR /app

# 設定環境變數:防止 Python 產生 .pyc 與強制無緩衝輸出日誌
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 安裝系統層級工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 複製依賴檔案並安裝
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 複製專案原始碼
COPY . .

# 建立存放語音檔的 static/audio 目錄
RUN mkdir -p static/audio

# 暴露服務連接埠
EXPOSE 5000

# 啟動命令:執行 Flask 應用程式
CMD ["python", "app.py"]

三、 建置與運行測試

1. 構建 Docker Image

在 Terminal 執行 Image 構建指令:

docker build -t prescription-vlm:v1.0 .

2. 啟動 Docker 容器

以環境變數檔案(.env)啟動容器並映射 5000 Port:

docker run -d -p 5000:5000 --env-file .env --name prescription_service prescription-vlm:v1.0

3. 驗證容器服務

執行 Health Check 確認容器內的 API 服務正常:

curl http://127.0.0.1:5000/ping

4. 預期輸出結果

{
  "service": "PrescriptionVLM Engine",
  "status": "online"
}

四、版本控制與提交 GitHub

測試成功後,將完整的 Docker 設定與 requirements.txt 提交至 GitHub:

git add .
git commit -m "保留雙引號 改填寫自己要記錄的標記 ex.鐵人賽第十天"
git push

五、本日小結與明日預告

今天完成了 PrescriptionVLM 後端服務的容器化封裝,系統現在具備跨平台部署能力。

明天(Day 11)進入 System Integration 與 End-to-End Testing,進行 API 壓力測試與邊界條件異常處理驗證。


上一篇
Day 09|跨科開藥不怕吃錯!用 Gemini VLM 實作重複藥性與高風險警語檢測
下一篇
Day 11|不怕亂傳 txt 檔!用 Python 自動化 E2E 測試驗證 AI 藥師微服務韌性
系列文
給藥袋裝一張嘴:30 天用 Android 與 Google VLM 實作高齡語音用藥助手 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言